unit TrocaSenhaDM;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, DB, FileUtil, LResources, Forms, Controls, Graphics,
  Dialogs, ZDataset, ZSqlUpdate, MainDM, QueryConditions, md5;

type

  { TTrocaSenhaData }

  TTrocaSenhaData = class(TMainDataModule)
    TrocaSenhaData: TDatasource;
    UsuarioDataSource: TDatasource;
    UsuarioZQueryativo: TStringField;
    UsuarioZQueryid_perfil: TLargeintField;
    UsuarioZQueryid_usuario: TLargeintField;
    UsuarioZQuerylogin: TStringField;
    UsuarioZQuerynome_pessoa: TStringField;
    UsuarioZQuerysenha: TStringField;
    UsuarioZUpdate: TZUpdateSQL;
    UsuarioZQuery: TZQuery;
    AuxiliarZQuery: TZQuery;
    procedure DataModuleCreate(Sender: TObject);
    /// Abre o DataSet
    procedure OpenDataSet(); override;
    /// Fecha o DataSet
    procedure CloseDataSet(); override;
    /// Realiza busca
    /// @param(Condicoes são as condições para a busca)
    /// @param(Tabela é a tabela no banco de dados)
    procedure Search(Condicoes: TQueryConditions; Tabela: string); override;
    function VerificaSenha(Login: string; Senha: string): string;
    function ConfereSenha(IDUsuario: integer; Senha: string): boolean;
    procedure BuscaDadosUsuario(IDUsuario: integer);
    procedure AlteraSenha(IDUsuario:integer;Senha:string);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  TrocaSenhaData: TTrocaSenhaData;

implementation

uses ConnectionDM, MainFm;

{ TTrocaSenhaData }

procedure TTrocaSenhaData.DataModuleCreate(Sender: TObject);
begin
  MainDataSet := UsuarioZQuery;
end;

procedure TTrocaSenhaData.OpenDataSet();
begin
  ConnectionData.EmptyQuery(UsuarioZQuery, 'usuario');
  BuscaDadosUsuario(MainForm.Usuario);
end;

procedure TTrocaSenhaData.CloseDataSet();
begin
  UsuarioZQuery.Close();
end;

procedure TTrocaSenhaData.Search(Condicoes: TQueryConditions; Tabela: string);
begin
  ConnectionData.OpenQueryConditions(UsuarioZQuery, Tabela, Condicoes);
end;

function TTrocaSenhaData.VerificaSenha(Login: string; Senha: string): string;
var
  senhaCrip: string;
begin
  senhaCrip := MD5Print(MD5String(Senha));
  with UsuarioZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('Select * FROM usuario');
    SQL.Add('where login =:login AND senha =:senha');
    ParamByName('login').AsString := Login;
    ParamByName('Senha').AsString := senhaCrip;
    Open();
    if (RecordCount > 0) then begin
      Result := FieldByName('ativo').AsString;
    end else begin
      Result := 'N';
    end;
  end;
end;

function TTrocaSenhaData.ConfereSenha(IDUsuario: integer; Senha: string
  ): boolean;
var
  senhaCrip: string;
begin
  senhaCrip := MD5Print(MD5String(Senha));
  with UsuarioZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('Select senha FROM usuario');
    SQL.Add('where id_usuario =:id_usuario');
    ParamByName('id_usuario').AsInteger := IDUsuario;
    Open();
    if (RecordCount > 0) then begin
      if senhaCrip = FieldByName('senha').AsString then begin
        Result := True;
      end else
        Result := False;
    end else begin
      Result := False;
    end;
  end;
end;

procedure TTrocaSenhaData.BuscaDadosUsuario(IDUsuario: integer);
begin
  with UsuarioZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('Select p.nome_pessoa, u.* from usuario as u, pessoa as p');
    SQL.Add('where id_usuario =:id_usuario AND u.id_usuario=p.id_pessoa');
    ParamByName('id_usuario').AsInteger := IDUsuario;
    Open();
  end;
end;

procedure TTrocaSenhaData.AlteraSenha(IDUsuario: integer; Senha: string);
var
  senhaCrip: string;
begin
  senhaCrip := MD5Print(MD5String(Senha));
   with AuxiliarZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('UPDATE usuario ');
    SQL.Add('SET senha=:senha WHERE id_usuario =:id_usuario');
    ParamByName('id_usuario').AsInteger := IDUsuario;
    ParamByName('senha').AsString:=senhaCrip;
    ExecSQL();
  end;
end;

initialization
  {$I trocasenhadm.lrs}
end.


